package bufferstring;
/*
 *  String,StringBuffer,StringBuilder区别
 *  1.String不可变长的， final char[]，所有的操作都改不了自身，方法返回新的字符串
 *  2.StringBuffer和StringBuilder可变长的，不是final的char[]，所有的操作都是改变自身 
 *  3.StringBuffer是线程安全的(多线程里用)，StringBuilder是线程不安全的(单线程里用).
 */
public class StringBuilderDemo {
	public static void main(String[] args) {
		// synchronized(sing 绰儿奈子的)同步
		// StringBuffer和StringBuilder 方法一摸一样，但是StringBuffer的每个方法synchronized修饰
		// StringBuffer线程安全的，因为操作过程加锁，所以效率比StringBuilder低
		
		// 可变长的字符串（带有缓存区）
		StringBuilder strbuf = new StringBuilder(); //无参构造默认char[] value=new char[16];
		//1.追加，都是对自身改变，并返回自己
		strbuf.append(true).append(100).append("haha").append(1.234); // "true100haha1.234"
		System.out.println(strbuf.length());
		
		strbuf.append("呵呵吼吼hihi");
		System.out.println(strbuf.length());  //24
		System.out.println(strbuf);
		//2.设置某个位置的字符
		strbuf.setCharAt(0, 'h');
		System.out.println(strbuf);
		//3.逆序
		strbuf.reverse();
		System.out.println(strbuf);
		//4.删除
		strbuf.deleteCharAt(0);
		System.out.println(strbuf);
		// [start,end) 删除一个区间的字符，包括start,不包括end
		strbuf.delete(1, 5);
		System.out.println(strbuf);
		//5.在2下标位置插入true
		strbuf.insert(2, 100);
		System.out.println(strbuf);
		//6.替换   替换一个区间的字符，包括start,不包括end
		strbuf.replace(0, 6, "~~~");
		System.out.println(strbuf);
		//7.StringBuffer和String相互转换
		String string = strbuf.toString();
		StringBuffer sss = new StringBuffer("hello");
	}
}
